package com.plian.system.entity.im;

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.plian.system.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import java.math.BigDecimal;

/**
 * @description:
 * @author: gangan
 * @create: 2020-05-07 10:12
 */
@Data
@TableName("im_investment_debt")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "InvestmentDebt 对象", description = "国有投资执行")
public class InvestmentDebt extends BaseEntity {

    /**
     * 主表id
     */
    @ApiModelProperty(value = "主表id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long baseInvestmentDebtId;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long projectId;

    /**
     * 项目名称
     */
    @ApiModelProperty(value = "项目名称")
    private String projectName;

    /**
     * 项目性质
     */
    @ApiModelProperty(value = "项目性质")
    private String projectNatureId;

    /**
     * 项目类别 1自营项目、2政府性项目
     */
    @ApiModelProperty(value = "项目类别 1自营项目、2政府性项目")
    private Integer projectCategory;

    /**
     * 项目公司
     */
    @ApiModelProperty(value = "项目公司")
    private String projectCompanyId;

    /**
     * 是否基金投资 1否2是
     */
    @ApiModelProperty(value = "是否基金投资 1否2是")
    private Integer isFundInvestment;

    /**
     * 1筹建 2在建 3建成
     */
    @ApiModelProperty(value = "1筹建 2在建 3建成")
    @TableField(value = "construction_status",updateStrategy = FieldStrategy.IGNORED)
    private Integer constructionStatus;

    /**
     * 一、项目投资及资金平衡整体计划 要素平衡安排计划
     */
    @ApiModelProperty(value = "一、项目投资及资金平衡整体计划 要素平衡安排计划")
    private String balancedPlanning;

    /**
     * 一、项目投资及资金平衡整体计划 计划总投资（调整后）
     */
    @ApiModelProperty(value = "一、项目投资及资金平衡整体计划 计划总投资（调整后）")
    @TableField(value = "plan_total_investment",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal planTotalInvestment;

    /**
     * 一、项目投资及资金平衡整体计划 其中：财政性资金
     */
    @ApiModelProperty(value = " 一、项目投资及资金平衡整体计划 其中：财政性资金")
    @TableField(value = "fiscal_funds",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal fiscalFunds;

    /**
     * 一、项目投资及资金平衡整体计划 其中：股东资本金
     */
    @ApiModelProperty(value = "一、项目投资及资金平衡整体计划 其中：股东资本金")
    @TableField(value = "shareholder_capital",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal shareholderCapital;

    /**
     * 一、项目投资及资金平衡整体计划 其中：项目借款
     */
    @ApiModelProperty(value = "一、项目投资及资金平衡整体计划 其中：项目借款")
    @TableField(value = "project_loan",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal projectLoan;

    /**
     * 财政性资金+股东资本金+项目借款
     */
    @ApiModelProperty(value = "财政性资金+股东资本金+项目借款")
    @TableField(value = "plan_total_investment_sum",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal planTotalInvestmentSum;


    /**
     * 建成项目竣工决算数（金额，无限制）
     */
    @ApiModelProperty(value = "建成项目竣工决算数（金额，无限制）")
    @TableField(value = "completed_projects_accounts",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal completedProjectsAccounts;

    /**
     * 二、报告期末项目实际资金平衡状况  项目实际财务支出
     */
    @ApiModelProperty(value = "二、报告期末项目实际资金平衡状况  项目实际财务支出")
    @TableField(value = "actual_financial_expenditure",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal actualFinancialExpenditure;

    /**
     * 二、报告期末项目实际资金平衡状况  项目实际取得资金 财政性资金
     */
    @ApiModelProperty(value = "二、报告期末项目实际资金平衡状况  项目实际取得资金 财政性资金")
    @TableField(value = "actual_fiscal_funds",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal actualFiscalFunds;

    /**
     * 二、报告期末项目实际资金平衡状况  项目实际取得资金 股东资本金
     */
    @ApiModelProperty(value = "二、报告期末项目实际资金平衡状况  项目实际取得资金 股东资本金")
    @TableField(value = "actual_shareholder_capital",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal actualShareholderCapital;

    /**
     * 二、报告期末项目实际资金平衡状况  项目实际取得资金 债务资金 合计
     */
    @ApiModelProperty(value = "二、报告期末项目实际资金平衡状况  项目实际取得资金 债务资金 合计")
    @TableField(value = "debt_capital_total",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal debtCapitalTotal;

    /**
     * 二、报告期末项目实际资金平衡状况  项目实际取得资金 债务资金 项目借款
     */
    @ApiModelProperty(value = "二、报告期末项目实际资金平衡状况  项目实际取得资金 债务资金 项目借款")
    @TableField(value = "debt_capital_loan",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal debtCapitalLoan;

    /**
     * 二、报告期末项目实际资金平衡状况  项目实际取得资金 债务资金 股东垫付资本金
     */
    @ApiModelProperty(value = "二、报告期末项目实际资金平衡状况  项目实际取得资金 债务资金 股东垫付资本金")
    @TableField(value = "debt_capital_shareholder_advance",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal debtCapitalShareholderAdvance;

    /**
     * 未来还需筹集的债务金额
     */
    @ApiModelProperty(value = "未来还需筹集的债务金额")
    @TableField(value = "future_raise_debt_amount",updateStrategy = FieldStrategy.IGNORED)
    private BigDecimal futureRaiseDebtAmount;

    /**
     * 实际要素平衡落实情况说明
     */
    @ApiModelProperty(value = "实际要素平衡落实情况说明")
    private String presentationCondition;


    /**
     * 数据来源 null为系统填报 对应用户id
     */
    @ApiModelProperty(value = "数据来源 null为系统填报 对应用户id")
    private String dataSource;

    /**
     * 数据来源id
     */
    @ApiModelProperty(value = "数据来源id", required = true)
    private String dataSourceId;
}
